import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ImageManager {
    // 存储图片信息：键为图片名，值为本地路径
    private Map<String, String> imageMap = new HashMap<>();

    /**
     * 下载图片并将信息加入集合
     * @param url 图片的网络URL
     */
    public void downloadImage(String url) {
        // 提取并清理文件名
        String fileName = extractAndCleanFileName(url);
        
        // 构建保存路径
        String saveDir = "images";
        FileUtils.ensureDirectoryExists(saveDir);
        String savePath = saveDir + File.separator + fileName;
        
        try {
            // 下载图片
            FileUtils.saveImage(url, savePath);
            
            // 将图片信息加入集合
            imageMap.put(fileName, savePath);
            
            // 记录日志
            String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            String log = String.format("%s Downloaded: %s -> %s", time, url, savePath);
            FileUtils.appendLog(log);
            
            System.out.println("图片下载成功，保存至：" + savePath);
        } catch (IOException e) {
            System.err.println("下载失败：" + e.getMessage());
        }
    }

    /**
     * 提取并清理文件名，移除非法字符
     */
    private String extractAndCleanFileName(String url) {
        // 从URL中提取文件名
        int lastSlashIndex = url.lastIndexOf("/");
        String fileName = (lastSlashIndex != -1) ? url.substring(lastSlashIndex + 1) : "unknown_image";
        
        // 替换系统不允许的文件名字符
        return fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
    }

    /**
     * 遍历集合，打印已下载图片列表
     */
    public void listImages() {
        if (imageMap.isEmpty()) {
            System.out.println("暂无已下载的图片");
            return;
        }
        
        System.out.println("=== 已下载图片列表 ===");
        Set<Map.Entry<String, String>> entries = imageMap.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println("图片名：" + entry.getKey() + "，路径：" + entry.getValue());
        }
    }

    /**
     * 根据名称查找图片路径
     * @param name 图片名称关键词
     */
    public void searchImage(String name) {
        if (name == null || name.trim().isEmpty()) {
            System.out.println("请输入有效的搜索关键词");
            return;
        }
        
        boolean found = false;
        System.out.println("=== 搜索结果 ===");
        for (Map.Entry<String, String> entry : imageMap.entrySet()) {
            if (entry.getKey().toLowerCase().contains(name.toLowerCase())) {
                System.out.println("找到图片：" + entry.getKey() + "，路径：" + entry.getValue());
                found = true;
            }
        }
        
        if (!found) {
            System.out.println("未找到包含 \"" + name + "\" 的图片");
        }
    }
}
